Skip to content

Commit

Permalink
First working firmware and interface
Browse files Browse the repository at this point in the history
  • Loading branch information
NarinLab committed Dec 30, 2017
1 parent 9a89c1a commit 90caccc
Show file tree
Hide file tree
Showing 45 changed files with 845 additions and 151 deletions.
3 changes: 2 additions & 1 deletion .vscode/arduino.json
Expand Up @@ -2,5 +2,6 @@
"port": "COM12",
"board": "esp8266:esp8266:nodemcuv2",
"configuration": "CpuFrequency=80,UploadSpeed=115200,FlashSize=4M3M",
"sketch": "GovindaRC-Ino\\GovindaRC-Ino.ino"
"sketch": "GovindaRC-Ino\\GovindaRC-Ino.ino",
"output": "firmware\\build"
}
Empty file added GovindaRC-App/2.4.2
Empty file.
68 changes: 38 additions & 30 deletions GovindaRC-App/package.json
Expand Up @@ -12,38 +12,46 @@
},
"private": true,
"dependencies": {
"@angular/animations": "^4.2.4",
"@angular/common": "^4.2.4",
"@angular/compiler": "^4.2.4",
"@angular/core": "^4.2.4",
"@angular/forms": "^4.2.4",
"@angular/http": "^4.2.4",
"@angular/platform-browser": "^4.2.4",
"@angular/platform-browser-dynamic": "^4.2.4",
"@angular/router": "^4.2.4",
"core-js": "^2.4.1",
"rxjs": "^5.4.2",
"zone.js": "^0.8.14"
"@angular/animations": "^5.1.2",
"@angular/cdk": "^5.0.2",
"@angular/common": "^5.1.2",
"@angular/compiler": "^5.1.2",
"@angular/core": "^5.1.2",
"@angular/flex-layout": "^2.0.0-beta.12",
"@angular/forms": "^5.1.2",
"@angular/http": "^5.1.2",
"@angular/material": "^5.0.2",
"@angular/platform-browser": "^5.1.2",
"@angular/platform-browser-dynamic": "^5.1.2",
"@angular/router": "^5.1.2",
"angular-svg-round-progressbar": "^1.2.1",
"core-js": "^2.5.3",
"hammerjs": "^2.0.8",
"nipplejs": "^0.6.7",
"queueing-subject": "^0.2.0",
"rxjs": "^5.5.6",
"rxjs-websockets": "^4.0.0",
"zone.js": "^0.8.19"
},
"devDependencies": {
"@angular/cli": "1.4.1",
"@angular/compiler-cli": "^4.2.4",
"@angular/language-service": "^4.2.4",
"@types/jasmine": "~2.5.53",
"@types/jasminewd2": "~2.0.2",
"@types/node": "~6.0.60",
"codelyzer": "~3.1.1",
"jasmine-core": "~2.6.2",
"jasmine-spec-reporter": "~4.1.0",
"karma": "~1.7.0",
"karma-chrome-launcher": "~2.1.1",
"karma-cli": "~1.0.1",
"karma-coverage-istanbul-reporter": "^1.2.1",
"karma-jasmine": "~1.1.0",
"@angular/cli": "^1.6.3",
"@angular/compiler-cli": "^5.1.2",
"@angular/language-service": "^5.1.2",
"@types/jasmine": "^2.8.3",
"@types/jasminewd2": "^2.0.3",
"@types/node": "^8.5.2",
"codelyzer": "^4.0.2",
"jasmine-core": "^2.8.0",
"jasmine-spec-reporter": "^4.2.1",
"karma": "^2.0.0",
"karma-chrome-launcher": "^2.2.0",
"karma-cli": "^1.0.1",
"karma-coverage-istanbul-reporter": "^1.3.3",
"karma-jasmine": "^1.1.1",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.1.2",
"ts-node": "~3.2.0",
"tslint": "~5.3.2",
"typescript": "~2.3.3"
"protractor": "^5.2.2",
"ts-node": "^4.1.0",
"tslint": "^5.8.0",
"typescript": "^2.6.2"
}
}
16 changes: 16 additions & 0 deletions GovindaRC-App/src/app/app-routing/app-routing.module.ts
@@ -0,0 +1,16 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule, Routes } from '@angular/router';

import { DashboardComponent } from '../dashboard/dashboard.component';

const routes: Routes = [
{ path: '', redirectTo: '/', pathMatch: 'full' },
{ path: 'dashboard', component: DashboardComponent }
];

@NgModule({
imports: [ RouterModule.forRoot(routes) ],
exports: [ RouterModule ]
})
export class AppRoutingModule {}
60 changes: 42 additions & 18 deletions GovindaRC-App/src/app/app.component.html
@@ -1,20 +1,44 @@
<!--The content below is only a placeholder and can be replaced.-->
<div style="text-align:center">
<h1>
Welcome to {{title}}!
</h1>
<img width="300" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTAgMjUwIj4KICAgIDxwYXRoIGZpbGw9IiNERDAwMzEiIGQ9Ik0xMjUgMzBMMzEuOSA2My4ybDE0LjIgMTIzLjFMMTI1IDIzMGw3OC45LTQzLjcgMTQuMi0xMjMuMXoiIC8+CiAgICA8cGF0aCBmaWxsPSIjQzMwMDJGIiBkPSJNMTI1IDMwdjIyLjItLjFWMjMwbDc4LjktNDMuNyAxNC4yLTEyMy4xTDEyNSAzMHoiIC8+CiAgICA8cGF0aCAgZmlsbD0iI0ZGRkZGRiIgZD0iTTEyNSA1Mi4xTDY2LjggMTgyLjZoMjEuN2wxMS43LTI5LjJoNDkuNGwxMS43IDI5LjJIMTgzTDEyNSA1Mi4xem0xNyA4My4zaC0zNGwxNy00MC45IDE3IDQwLjl6IiAvPgogIDwvc3ZnPg==">
</div>
<h2>Here are some links to help you start: </h2>
<ul>
<li>
<h2><a target="_blank" href="https://angular.io/tutorial">Tour of Heroes</a></h2>
</li>
<li>
<h2><a target="_blank" href="https://github.com/angular/angular-cli/wiki">CLI Documentation</a></h2>
</li>
<li>
<h2><a target="_blank" href="https://blog.angular.io/">Angular blog</a></h2>
</li>
</ul>
<div id="main">
<div>
<mat-toolbar color="primary">
<mat-toolbar-row>
<span><mat-icon>{{isConnected}}</mat-icon></span>
<span>GovindaRC</span>
<button mat-icon-button [matMenuTriggerFor]="menu">
<mat-icon>more_vert</mat-icon>
</button>
</mat-toolbar-row>
</mat-toolbar>

<mat-menu #menu="matMenu">
<button mat-menu-item (click)="openDialogOptions()">
<mat-icon>dialpad</mat-icon>
<span>Options</span>
</button>
<button mat-menu-item (click)="openAbout()">
<mat-icon>info</mat-icon>
<span>About</span>
</button>
</mat-menu>

<span class="btnConnect">
<button mat-fab (click)="btnConnectClick()">
<mat-icon>autorenew</mat-icon>
</button>
</span>
<span class="btnEye">
<button mat-fab (click)="btnEyeClick()">
<mat-icon>report problem</mat-icon>
</button>
</span>

<div id="ultrasonic">
<div [ngClass]="{'ultrasonic-danger': ultrasonic<=15}" class="ultrasonic-content">{{ultrasonic}}</div>
</div>

<router-outlet></router-outlet>
<app-pan-controller></app-pan-controller>

</div>
</div>
82 changes: 80 additions & 2 deletions GovindaRC-App/src/app/app.component.ts
@@ -1,10 +1,88 @@
import { Component } from '@angular/core';
import { Component, OnInit, Inject } from '@angular/core';
import { Subscription } from 'rxjs/Subscription';
import { ServerSocketService } from './server-socket.service';
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA, MatSnackBarConfig, MatSnackBarModule} from '@angular/material';
import {MatSnackBar, MAT_SNACK_BAR_DATA} from '@angular/material';
import { MatChipsModule } from '@angular/material';
import { DialogOptionsComponent } from './dialog-options/dialog-options.component';
import { SnackbarComponent } from './snackbar/snackbar.component';

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app';
title = 'GovindaRC';
public ultrasonic = 0;
public isConnected = 'gps_not_fixed';
public ipAddress = '18.9.70.23';
private socketSubscription: Subscription;

constructor(
private socket: ServerSocketService,
public dialog: MatDialog,
public snackbar: MatSnackBar
) {}

ngOnInit() {

}

openDialogOptions(): void {
let dialogRef = this.dialog.open(DialogOptionsComponent, {
width: '250px',
data: { ipAddress: this.ipAddress }
});

dialogRef.afterClosed().subscribe(data => {
this.ipAddress = data.ipAddress;
});
}

openAbout(): void{
let mySnackBar = this.snackbar.open('GovindaRC App v0.1.0','OK', {
duration: 15000,
data: {message: 'GovindaRC App v0.1.0', action: 'OK'},
verticalPosition: 'top',
horizontalPosition: 'center',
panelClass: 'snackbar'
});


}

websocketConnect(){
this.socket.ipAddress = this.ipAddress;
this.socket.connect();
this.socketSubscription = this.socket.messages.subscribe((message: string) => {
try {
var obj = JSON.parse(message);
} catch (e) {
obj = {};
}

this.isConnected = 'gps_fixed';
if(obj.type == 'scan'){
this.ultrasonic = Math.round(obj.data);
}
});
this.socket.messages.retryWhen(errors => errors.delay(1000)).subscribe(message => {
this.isConnected = 'gps_fixed';
});
this.socket.send('{"cmd": "P"}');
}

ngOnDestroy() {
this.socketSubscription.unsubscribe();
this.isConnected = "gps_not_fixed";
}

btnConnectClick(){
this.websocketConnect();
}

btnEyeClick(){
this.socket.send('{"cmd": "scan", "arg": 0}');
}
}
60 changes: 56 additions & 4 deletions GovindaRC-App/src/app/app.module.ts
Expand Up @@ -2,15 +2,67 @@ import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { DashboardComponent } from './dashboard/dashboard.component';
import { AppRoutingModule } from './app-routing/app-routing.module';
import { ServerSocketService } from './server-socket.service';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MaterialModule } from './material/material.module';
import { PanControllerComponent } from './pan-controller/pan-controller.component';
import { FlexLayoutModule } from "@angular/flex-layout";
import { HammerGestureConfig, HAMMER_GESTURE_CONFIG } from '@angular/platform-browser';
import { MatProgressSpinnerModule, MatDialogModule } from '@angular/material';
import { MatInputModule, MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material';
import { MatSnackBarModule } from "@angular/material";
import { MatChipsModule } from '@angular/material';
import { DialogOptionsComponent } from './dialog-options/dialog-options.component';
import { SnackbarComponent } from './snackbar/snackbar.component';
import {OverlayContainer} from '@angular/cdk/overlay';

export class MyHammerConfig extends HammerGestureConfig {
overrides = <any>{
'swipe': {velocity: 0.3, threshold: 10} // override default settings
}
}

@NgModule({
declarations: [
AppComponent
AppComponent,
DashboardComponent,
PanControllerComponent,
DialogOptionsComponent,
SnackbarComponent
],
imports: [
BrowserModule
BrowserModule,
AppRoutingModule,
FormsModule,
HttpModule,
MaterialModule,
BrowserAnimationsModule,
FlexLayoutModule,
MatProgressSpinnerModule,
MatDialogModule,
MatInputModule,
MatSnackBarModule,
MatChipsModule
],
entryComponents: [
DialogOptionsComponent,
SnackbarComponent
],
providers: [],
providers: [
ServerSocketService,
{
provide: HAMMER_GESTURE_CONFIG,
useClass: MyHammerConfig
}
],
bootstrap: [AppComponent]
})
export class AppModule { }
export class AppModule {
constructor(overlayContainer: OverlayContainer) {
//overlayContainer.getContainerElement().classList.add('unicorn-dark-theme');
}
}
3 changes: 3 additions & 0 deletions GovindaRC-App/src/app/dashboard/dashboard.component.css
@@ -0,0 +1,3 @@
div#dashboard {

}
Empty file.
25 changes: 25 additions & 0 deletions GovindaRC-App/src/app/dashboard/dashboard.component.spec.ts
@@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';

import { DashboardComponent } from './dashboard.component';

describe('DashboardComponent', () => {
let component: DashboardComponent;
let fixture: ComponentFixture<DashboardComponent>;

beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ DashboardComponent ]
})
.compileComponents();
}));

beforeEach(() => {
fixture = TestBed.createComponent(DashboardComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});
20 changes: 20 additions & 0 deletions GovindaRC-App/src/app/dashboard/dashboard.component.ts
@@ -0,0 +1,20 @@
import { Component, OnInit } from '@angular/core';
import { Subscription } from 'rxjs/Subscription';
import { ServerSocketService } from '../server-socket.service';

@Component({
selector: 'app-dashboard',
templateUrl: './dashboard.component.html',
styleUrls: ['./dashboard.component.css']
})
export class DashboardComponent implements OnInit {
private socketSubscription: Subscription;

constructor(private socket: ServerSocketService) { }

ngOnInit() {

}


}

0 comments on commit 90caccc

Please sign in to comment.