Hackster will be offline on Monday, September 30 from 8pm to 10pm PDT to perform some scheduled maintenance.
Published © CC BY-NC-SA

Steering Car PCB Kit

The Steering Car PCB project behaves like any other RC car, it makes agile turns and zips around much faster than our Mecanum Kit project.

IntermediateFull instructions provided1 hour316
Steering Car PCB Kit

Things used in this project

Hardware components

Quantum Integration Quantum Starter Bundle
×1
Quantum Integration Quantum Steering Car PCB Kit
×1
Quantum Integration Quantum Starter Kit
This will have some of the parts needed if you do not already have a starter kit.
×1
LED (generic)
LED (generic)
Included in Quantum Starter Kit
×1
Slide Switch
Slide Switch
×1
Resistor 220 ohm
Resistor 220 ohm
Included in Quantum Starter Kit
×1
Capacitor 100 nF
Capacitor 100 nF
×2
Capacitor 100 µF
Capacitor 100 µF
×1
Capacitor 10 µF
Capacitor 10 µF
×1
Linear Regulator (7805)
Linear Regulator (7805)
×1
Dual H-Bridge motor drivers L293D
Texas Instruments Dual H-Bridge motor drivers L293D
Included in Quantum Starter Kit
×1
DC POWER JACK 2.1MM BARREL-TYPE PCB MOUNT
TaydaElectronics DC POWER JACK 2.1MM BARREL-TYPE PCB MOUNT
×1
9V to Barrel Jack Connector
9V to Barrel Jack Connector
×1
2x5 pin header
×1
1x2 3.5mm Terminal Block
×1
Steering Car Chassis
Any kit that uses 2 brushed DC motors and a servo can be used for this build
×1
Quantum Integration Quantum Joystick DIY PCB Kit
OPTIONAL if you wish to make your own joystick controller, but it must be compatible with the Quantum platform.
×1

Software apps and online services

Quantum Integration Quantum Q-Server

Hand tools and fabrication machines

Flathead Screwdriver
Included in the Quantum Starter Kit
Soldering iron (generic)
Soldering iron (generic)
Solder Wire, Lead Free
Solder Wire, Lead Free
Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires
Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires
PCB Holder, Soldering Iron
PCB Holder, Soldering Iron

Story

Read more

Schematics

ALL FILES NEEDED

All files for this project is here

Code

Steering Car PCB App

JSON
This code is made to only be imported to our application builder on our Q-Server's OS as it is customized to work with our UI.
{"id":"278","name":"Steering Car","identifier":"Steering Car","offsetX":251.2852686847421,"offsetY":182.80238319748392,"zoom":22.458414713541693,"gridSize":0,"links":[{"id":"31531","internalFlowId":"31518","type":"default","selected":false,"points":[{"id":"1dd9be9d-6782-49b0-bdf4-975886f6e9a5","selected":false,"x":786.5781375817294,"y":234.95315892699043},{"id":"efe082d1-000e-43de-a7ec-34ac0c5d9e3f","selected":false,"x":1011.1407562002595,"y":223.92198077691484}],"labels":[],"width":3,"color":"rgba(255,255,255,0.5)","curvyness":50,"source":"3","target":"2","sourcePort":"14517","targetPort":"14510"},{"id":"31532","internalFlowId":"31519","type":"default","selected":false,"points":[{"id":"dc74bece-3c99-4230-af71-f8a9035058f1","selected":false,"x":786.5781375817294,"y":234.95315892699043},{"id":"66f333ca-44dc-4243-ba93-01c447dbbbe7","selected":false,"x":1005.3907373317445,"y":413.687514166823}],"labels":[],"width":3,"color":"rgba(255,255,255,0.5)","curvyness":50,"source":"3","target":"1","sourcePort":"14517","targetPort":"14505"},{"id":"31533","internalFlowId":"31520","type":"default","selected":false,"points":[{"id":"59c53a2e-9730-45d1-8ec3-772ec9cade67","selected":false,"x":302.9686642986263,"y":218.96885753145665},{"id":"2761656c-7b03-46b5-bf0c-87c185f706d8","selected":false,"x":622.5780676301617,"y":234.95315892699043}],"labels":[],"width":3,"color":"rgba(255,255,255,0.5)","curvyness":50,"source":"4","target":"3","sourcePort":"14519","targetPort":"14511"},{"id":"31534","internalFlowId":"31521","type":"default","selected":false,"points":[{"id":"6269a4cf-ad7b-4158-acd5-ba09c8fdbed7","selected":false,"x":800.4531230851873,"y":692.9843812570033},{"id":"adb1020a-a40d-4664-bc17-b7e9b834b3fe","selected":false,"x":1049.4218436894216,"y":738.8594477570133}],"labels":[],"width":3,"color":"rgba(255,255,255,0.5)","curvyness":50,"source":"7","target":"6","sourcePort":"14534","targetPort":"14525"},{"id":"31535","internalFlowId":"31522","type":"default","selected":false,"points":[{"id":"d3321546-8c56-4511-b1e7-b87ca3ed4adf","selected":false,"x":368.34378878480436,"y":705.3594578815823},{"id":"c1c5c744-a13e-4f2e-9f29-8bd89f0d804a","selected":false,"x":636.4530531336196,"y":692.9843812570033}],"labels":[],"width":3,"color":"rgba(255,255,255,0.5)","curvyness":50,"source":"5","target":"7","sourcePort":"14521","targetPort":"14528"},{"id":"31536","internalFlowId":"31523","type":"default","selected":false,"points":[{"id":"22b5c241-1620-4047-81cc-bd2cb08a77e7","selected":false,"x":-13.406353419369339,"y":926.5782074789005},{"id":"c4a76e8f-6eb4-4300-9242-428183dec04f","selected":false,"x":115.5938177778885,"y":918.5781872297626}],"labels":[],"width":3,"color":"rgba(255,255,255,0.5)","curvyness":50,"source":"8","target":"11","sourcePort":"14537","targetPort":"14544"},{"id":"31537","internalFlowId":"31524","type":"default","selected":false,"points":[{"id":"0976e9b6-258e-4d83-a481-22e54e47728a","selected":false,"x":-16.609398889729192,"y":1089.9063281932167},{"id":"00123478-d5c9-492f-b9e6-c6145a801967","selected":false,"x":115.5938177778885,"y":1085.1093534144381}],"labels":[],"width":3,"color":"rgba(255,255,255,0.5)","curvyness":50,"source":"9","target":"12","sourcePort":"14540","targetPort":"14547"},{"id":"31538","internalFlowId":"31525","type":"default","selected":false,"points":[{"id":"53813929-cc09-465a-808e-f3d63dd115a7","selected":false,"x":-16.609398889729192,"y":1250.0312653748674},{"id":"ad22a82a-3ce9-47a8-997f-c2f437b65ba5","selected":false,"x":114.00002653177496,"y":1243.6250363718434}],"labels":[],"width":3,"color":"rgba(255,255,255,0.5)","curvyness":50,"source":"10","target":"13","sourcePort":"14543","targetPort":"14550"},{"id":"31539","internalFlowId":"31526","type":"default","selected":false,"points":[{"id":"efb8d893-488e-4d05-89ea-a6afbdd668c5","selected":false,"x":279.5937496671514,"y":918.5781872297626},{"id":"dd86b134-660c-4738-9425-f6f0bfb61e99","selected":false,"x":564.2547701276108,"y":738.7972927043112},{"id":"e7bf51f0-a6ef-4fd1-83ea-5d82759492ed","selected":false,"x":636.4530531336196,"y":692.9843812570033}],"labels":[],"width":3,"color":"rgba(255,255,255,0.5)","curvyness":50,"source":"11","target":"7","sourcePort":"14546","targetPort":"14528"},{"id":"31540","internalFlowId":"31527","type":"default","selected":false,"points":[{"id":"11ce3b42-6c49-49b0-89bd-b59655816aee","selected":false,"x":279.5937496671514,"y":1085.1093534144381},{"id":"93e1da47-7a5d-4fee-afd6-c042c3d0c35d","selected":false,"x":564.2547701276108,"y":674.9923542656973},{"id":"814c3a02-bd29-4c59-ad8a-f21576ab707d","selected":false,"x":636.4530531336196,"y":692.9843812570033}],"labels":[],"width":3,"color":"rgba(255,255,255,0.5)","curvyness":50,"source":"12","target":"7","sourcePort":"14549","targetPort":"14528"},{"id":"31541","internalFlowId":"31528","type":"default","selected":false,"points":[{"id":"8fabf5d3-9c63-46e4-b66e-4481a14e203b","selected":false,"x":277.9999584210379,"y":1243.6250363718434},{"id":"703fed04-89a7-48c7-8025-98fc3fde1872","selected":false,"x":545.7849195269595,"y":723.6855967583236},{"id":"b295ded0-da0f-45a8-8dac-c94b55c432f5","selected":false,"x":636.4530531336196,"y":692.9843812570033}],"labels":[],"width":3,"color":"rgba(255,255,255,0.5)","curvyness":50,"source":"13","target":"7","sourcePort":"14552","targetPort":"14528"},{"id":"31542","internalFlowId":"31529","type":"default","selected":false,"points":[{"id":"fa466bca-111e-46af-b52c-d5b39b12cf57","selected":false,"x":32.95303564572795,"y":444.4687811369812},{"id":"76a4e506-6a07-417d-b724-919871d6804f","selected":false,"x":142.6404994043729,"y":439.6875454609454}],"labels":[],"width":3,"color":"rgba(255,255,255,0.5)","curvyness":50,"source":"15","target":"14","sourcePort":"14560","targetPort":"14553"},{"id":"31543","internalFlowId":"31530","type":"default","selected":false,"points":[{"id":"95ff18e4-a4a7-431f-b414-6916eab33264","selected":false,"x":309.96869927441014,"y":439.6875454609454},{"id":"dc9aa6bb-1a8f-4131-98fe-3fbb989c82c3","selected":false,"x":622.5780676301617,"y":234.95315892699043}],"labels":[],"width":3,"color":"rgba(255,255,255,0.5)","curvyness":50,"source":"14","target":"3","sourcePort":"14556","targetPort":"14511"}],"nodes":[{"id":"1","internalFlowId":"1","type":"quantum","selected":false,"x":987.394,"y":301.197,"name":"Motor BR","mappingDescription":"No instructions defined!","description":"The DC Motor control is just a bi-directional motor. States are open, close and off, with speed control.","color":"#02B0EF","qType":"Widget","originalName":"Motor","factoryId":null,"properties":{"executableWidgetCode":"let out = '0';\n\nif(inPorts[1].value && !inPorts[2].value){\n  out = '1';\n}else if(!inPorts[1].value && inPorts[2].value){\n  out = '-1';\n}else if(inPorts[1].value && inPorts[2].value){\n  if(trigger === 1){\n    out = '1';\n  }else{\n    out = '-1';\n  }\n}\n\nfunction joyOut(value) {\n  const ret = (value - 0) * (255 - (-255)) / (4095 - 0) + (-255);\n\n  if (value === 2048) {\n    return 0;\n  } if (value < 2048) {\n    return Math.ceil(ret);\n  }\n  return Math.floor(ret);\n}\nswitch(trigger){\n  case 0: {\n    return [inPorts[0].value];\n  }; break;\n    case 1: {\n  return [out * (inPorts[3].value || 0)];  \n  }; break;\n    case 2: {\n    return [out * (inPorts[3].value || 0)];\n  }; break;\n    case 3: {\n    return [inPorts[3].value * (out || 0)];\n  }; break;\n    case 4: {\n    return [joyOut(inPorts[4].value)];\n  }; break;\n  default: break;\n}","mappableCategory":{"category":4,"subCategory":3},"multiWidget":false,"manufacturer":"generic"},"ports":[{"id":"14501","internalFlowId":"10141","type":"quantum","selected":false,"name":"63c1d1c6-97b9-43b1-80fd-689043da4fbc","in":true,"label":"Motor","description":"Nothing added here yet.","qTrigger":true,"defaultValue":"","properties":{"hidden":true,"clientService":{"key":"q_dc_motor","name":"DC Motor","uuid":"fa008e38-f01d-5100-992d-45364f79a961","value_len":"2","props":["write"],"propChar":[],"signalType":{"key":"motor","name":"Motor","baseType":{"name":"Number"},"range":{"min":-255,"max":255},"internal":true},"drivers":["custom_pca9865_motor","custom_pca9865_motor_speed_dir","custom_tlc5940_motor","custom_tri_state_motor","custom_tri_state_motor_speed_dir"]}},"signalType":{"key":"motor","name":"Motor","baseType":{"name":"Number"},"range":{"min":-255,"max":255},"internal":true},"index":0,"clients":[{"id":3637,"createdAt":"2020-08-14T01:50:46.331Z","updatedAt":"2020-08-14T01:50:46.331Z","clientId":256,"subClientId":1771,"serviceId":6874,"PortId":14501,"client":{"id":256,"name":"Q #03220","mac_address":"08:6b:d7:49:0c:94","proxy":"02:81:e6:8e:59:ca","state":"ON","rssi":-44,"batteryLevel":100,"batteryMode":"USB","lifeCycle":false,"manufacturer":"Quantum","category":{"category":null},"advertisement":{"localName":"Q #03220","txPowerLevel":1,"serviceData":[],"serviceUuids":["5155414e54554d430000ffffffffffff"],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]},"energyInformation":{"batteryLevel":"100%","batteryVoltage":"3314mV","deviceVoltage":"3.314V","internalResistance":"0.03","powerTypeNumeric":1,"powerType":"USB"},"createdAt":"2020-08-14T01:46:40.880Z","updatedAt":"2020-08-14T01:48:27.931Z","proxyLinkId":1},"subClient":{"id":1771,"name":"Motor BR","category":{"category":4,"subCategory":3},"index":2,"createdAt":"2020-08-14T01:48:23.561Z","updatedAt":"2020-08-14T01:48:27.149Z","ClientId":256},"service":{"id":6874,"client_mac_address":null,"name":"Motor","signalType":"DC Motor","serviceKey":"q_dc_motor","uuid":"fa008e38f01d5101992d45364f79a961","characteristics":[{"uuid":"6375a20d31ae4456aaf68fc84e3cce26","name":null,"type":null,"properties":["read"],"value":"Motor"},{"uuid":"a97ba6d9c40941188735b5bef87b9afd","name":null,"type":null,"properties":["write"],"value":""},{"uuid":"93d79faa21ed4ce7b658d9bcb06bd943","name":null,"type":null,"properties":["read"],"value":"-"},{"uuid":"1270fde2fd5e4e4fb866241f105f7b15","name":null,"type":null,"properties":["read"],"value":"\u0001\u0001Motor BR~4~3"}],"type":null,"createdAt":"2020-08-14T01:48:23.897Z","updatedAt":"2020-08-14T01:48:27.634Z","SubClientId":1771}}],"NodeId":1},{"id":"14502","internalFlowId":"10142","type":"quantum","selected":false,"name":"cdc3e808-5b45-44bd-9608-70587e2ed315","in":true,"label":"Clockwise","description":"Nothing added here yet.","qTrigger":true,"defaultValue":"","properties":{"virtual":true},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":1,"clients":[],"NodeId":1},{"id":"14503","internalFlowId":"10143","type":"quantum","selected":false,"name":"e439fd7f-bc69-498a-bc18-fef9233f6a9f","in":true,"label":"Counter Clockwise","description":"Nothing added here yet.","qTrigger":true,"defaultValue":"","properties":{"virtual":true},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":2,"clients":[],"NodeId":1},{"id":"14504","internalFlowId":"10144","type":"quantum","selected":false,"name":"7446ef76-cbc3-4465-b263-95188963afe4","in":true,"label":"Speed","description":"Nothing added here yet.","qTrigger":true,"defaultValue":"","properties":{"virtual":true},"signalType":{"key":"pwm","name":"PWM","baseType":{"name":"Number"},"range":{"min":0,"max":255}},"index":3,"clients":[],"NodeId":1},{"id":"14505","internalFlowId":"10145","type":"quantum","selected":false,"name":"c8402f27-dc16-4e2c-a1db-273e0524ce6e","in":true,"label":"Joystick Axle","description":"Nothing added here yet.","qTrigger":true,"defaultValue":null,"properties":{"virtual":true},"signalType":{"key":"analog","name":"Analog","baseType":{"name":"Number"},"range":{"min":0,"max":4095}},"index":4,"clients":[],"NodeId":1}],"category":"Actuators","version":"0.0.1"},{"id":"2","internalFlowId":"2","type":"quantum","selected":false,"x":993.149,"y":111.428,"name":"Motor BL","mappingDescription":"No instructions defined!","description":"The DC Motor control is just a bi-directional motor. States are open, close and off, with speed control.","color":"#02B0EF","qType":"Widget","originalName":"Motor","factoryId":null,"properties":{"executableWidgetCode":"let out = '0';\n\nif(inPorts[1].value && !inPorts[2].value){\n  out = '1';\n}else if(!inPorts[1].value && inPorts[2].value){\n  out = '-1';\n}else if(inPorts[1].value && inPorts[2].value){\n  if(trigger === 1){\n    out = '1';\n  }else{\n    out = '-1';\n  }\n}\n\nfunction joyOut(value) {\n  const ret = (value - 0) * (255 - (-255)) / (4095 - 0) + (-255);\n\n  if (value === 2048) {\n    return 0;\n  } if (value < 2048) {\n    return Math.ceil(ret);\n  }\n  return Math.floor(ret);\n}\nswitch(trigger){\n  case 0: {\n    return [inPorts[0].value];\n  }; break;\n    case 1: {\n  return [out * (inPorts[3].value || 0)];  \n  }; break;\n    case 2: {\n    return [out * (inPorts[3].value || 0)];\n  }; break;\n    case 3: {\n    return [inPorts[3].value * (out || 0)];\n  }; break;\n    case 4: {\n    return [joyOut(inPorts[4].value)];\n  }; break;\n  default: break;\n}","mappableCategory":{"category":4,"subCategory":3},"multiWidget":false,"manufacturer":"generic"},"ports":[{"id":"14506","internalFlowId":"10146","type":"quantum","selected":false,"name":"42836637-e15a-49f7-a6cc-eab63dd42178","in":true,"label":"Motor","description":"Nothing added here yet.","qTrigger":true,"defaultValue":"","properties":{"hidden":true,"clientService":{"key":"q_dc_motor","name":"DC Motor","uuid":"fa008e38-f01d-5100-992d-45364f79a961","value_len":"2","props":["write"],"propChar":[],"signalType":{"key":"motor","name":"Motor","baseType":{"name":"Number"},"range":{"min":-255,"max":255},"internal":true},"drivers":["custom_pca9865_motor","custom_pca9865_motor_speed_dir","custom_tlc5940_motor","custom_tri_state_motor","custom_tri_state_motor_speed_dir"]}},"signalType":{"key":"motor","name":"Motor","baseType":{"name":"Number"},"range":{"min":-255,"max":255},"internal":true},"index":0,"clients":[{"id":3638,"createdAt":"2020-08-14T01:50:46.331Z","updatedAt":"2020-08-14T01:50:46.331Z","clientId":256,"subClientId":1770,"serviceId":6873,"PortId":14506,"client":{"id":256,"name":"Q #03220","mac_address":"08:6b:d7:49:0c:94","proxy":"02:81:e6:8e:59:ca","state":"ON","rssi":-44,"batteryLevel":100,"batteryMode":"USB","lifeCycle":false,"manufacturer":"Quantum","category":{"category":null},"advertisement":{"localName":"Q #03220","txPowerLevel":1,"serviceData":[],"serviceUuids":["5155414e54554d430000ffffffffffff"],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]},"energyInformation":{"batteryLevel":"100%","batteryVoltage":"3314mV","deviceVoltage":"3.314V","internalResistance":"0.03","powerTypeNumeric":1,"powerType":"USB"},"createdAt":"2020-08-14T01:46:40.880Z","updatedAt":"2020-08-14T01:48:27.931Z","proxyLinkId":1},"subClient":{"id":1770,"name":"Motor BL","category":{"category":4,"subCategory":3},"index":1,"createdAt":"2020-08-14T01:48:23.464Z","updatedAt":"2020-08-14T01:48:26.961Z","ClientId":256},"service":{"id":6873,"client_mac_address":null,"name":"Motor","signalType":"DC Motor","serviceKey":"q_dc_motor","uuid":"fa008e38f01d5100992d45364f79a961","characteristics":[{"uuid":"6375a20d31ae4456aaf68fc84e3cce26","name":null,"type":null,"properties":["read"],"value":"Motor"},{"uuid":"a97ba6d9c40941188735b5bef87b9afd","name":null,"type":null,"properties":["write"],"value":""},{"uuid":"93d79faa21ed4ce7b658d9bcb06bd943","name":null,"type":null,"properties":["read"],"value":"-"},{"uuid":"1270fde2fd5e4e4fb866241f105f7b15","name":null,"type":null,"properties":["read"],"value":"\u0001\u0000Motor BL~4~3"}],"type":null,"createdAt":"2020-08-14T01:48:23.895Z","updatedAt":"2020-08-14T01:48:27.632Z","SubClientId":1770}}],"NodeId":2},{"id":"14507","internalFlowId":"10147","type":"quantum","selected":false,"name":"50f1d95e-917c-44c3-ad58-794d00b9604a","in":true,"label":"Clockwise","description":"Nothing added here yet.","qTrigger":true,"defaultValue":"","properties":{"virtual":true},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":1,"clients":[],"NodeId":2},{"id":"14508","internalFlowId":"10148","type":"quantum","selected":false,"name":"c21abcc8-1380-4da9-993d-93918d0f92a2","in":true,"label":"Counter Clockwise","description":"Nothing added here yet.","qTrigger":true,"defaultValue":"","properties":{"virtual":true},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":2,"clients":[],"NodeId":2},{"id":"14509","internalFlowId":"10149","type":"quantum","selected":false,"name":"6bdc3b69-9895-414e-8bca-c9c6f928640c","in":true,"label":"Speed","description":"Nothing added here yet.","qTrigger":true,"defaultValue":"","properties":{"virtual":true},"signalType":{"key":"pwm","name":"PWM","baseType":{"name":"Number"},"range":{"min":0,"max":255}},"index":3,"clients":[],"NodeId":2},{"id":"14510","internalFlowId":"10150","type":"quantum","selected":false,"name":"8853d475-b26f-4149-82f5-65c4ac614840","in":true,"label":"Joystick Axle","description":"Nothing added here yet.","qTrigger":true,"defaultValue":null,"properties":{"virtual":true},"signalType":{"key":"analog","name":"Analog","baseType":{"name":"Number"},"range":{"min":0,"max":4095}},"index":4,"clients":[],"NodeId":2}],"category":"Actuators","version":"0.0.1"},{"id":"3","internalFlowId":"3","type":"quantum","selected":false,"x":604.579,"y":188.467,"name":"Manual Ranging","mappingDescription":null,"description":"Set custom Ranges to a numeric value.","color":"#DE00BC","qType":"Snippet","originalName":"Manual Ranging","factoryId":null,"properties":{"executeCode":"const value_between = (value, min, max) => {\n    if(min > max){\n        return value <= min && value >= max;\n    }else if(max > min){\n        return value >= min && value <= max;\n    }else{\n        return true;\n    }\n}\n\n\nconst value  = inPorts[0].value ? parseFloat(inPorts[0].value) : 0;\nconst newMin = inPorts[3].value ? parseFloat(inPorts[3].value) : 0;\nconst newMax = inPorts[4].value ? parseFloat(inPorts[4].value) : 0;\nconst oldMin = inPorts[1].value ? parseFloat(inPorts[1].value) : 0;\nconst oldMax = inPorts[2].value ? parseFloat(inPorts[2].value) : 0;\n\nif(value_between(value, oldMin, oldMax)){\n  \n    const retValue = ((value - oldMin) * (newMax - newMin) / (oldMax - oldMin) + newMin);\n  \n  if(inPorts[5].value)\n    return [Math.round(retValue)];\n  else{\n    return [retValue];\n  } \n}"},"ports":[{"id":"14511","internalFlowId":"10151","type":"quantum","selected":false,"name":"fd1aac42-6f07-4e63-952d-8d27fa2bf1a4","in":true,"label":"Value","description":null,"qTrigger":true,"defaultValue":"","properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":0,"clients":[],"NodeId":3},{"id":"14512","internalFlowId":"10152","type":"quantum","selected":false,"name":"ef6557b3-d3db-46d7-a90f-3898d2f529e1","in":true,"label":"In Min","description":null,"qTrigger":false,"defaultValue":"0","properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":1,"clients":[],"NodeId":3},{"id":"14513","internalFlowId":"10153","type":"quantum","selected":false,"name":"585a1271-ddd2-4063-9579-a850e1d1cb00","in":true,"label":"In Max","description":null,"qTrigger":false,"defaultValue":"0","properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":2,"clients":[],"NodeId":3},{"id":"14514","internalFlowId":"10154","type":"quantum","selected":false,"name":"341b40a1-8db7-4559-821e-8542c8df86e7","in":true,"label":"Out Min","description":null,"qTrigger":false,"defaultValue":"0","properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":3,"clients":[],"NodeId":3},{"id":"14515","internalFlowId":"10155","type":"quantum","selected":false,"name":"4199dd39-83f1-468f-b342-aee57bd4812e","in":true,"label":"Out Max","description":null,"qTrigger":false,"defaultValue":"0","properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":4,"clients":[],"NodeId":3},{"id":"14516","internalFlowId":"10156","type":"quantum","selected":false,"name":"143543bc-7294-4cf9-9501-4d36e654fc54","in":true,"label":"Rounded","description":null,"qTrigger":false,"defaultValue":"0","properties":{},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":5,"clients":[],"NodeId":3},{"id":"14517","internalFlowId":"10157","type":"quantum","selected":false,"name":"cdc9dfb6-7099-42d1-af41-093612487102","in":false,"label":"Value","description":null,"qTrigger":null,"defaultValue":null,"properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":6,"clients":[],"NodeId":3}],"category":"Compare","version":"0.0.1"},{"id":"4","internalFlowId":"4","type":"quantum","selected":false,"x":120.982,"y":150.474,"name":"Left","mappingDescription":"No instructions defined!","description":"Joystick controller with optional button","color":"#02B0EF","qType":"Widget","originalName":"Joystick","factoryId":null,"properties":{"mappableCategory":{"category":7,"subCategory":2},"multiWidget":false,"manufacturer":"generic"},"ports":[{"id":"14518","internalFlowId":"10158","type":"quantum","selected":false,"name":"cb57ea22-e82b-4358-a8fb-87d4d585a4f2","in":false,"label":"X-axis","description":"Nothing added here yet.","qTrigger":null,"defaultValue":null,"properties":{"clientService":{"key":"q_analog_in","name":"Analog In","uuid":"b71c0915-8c3a-5100-8db8-7c5040729981","value_len":"4","props":["read","notify"],"propChar":[{"key":"resolution","title":"Resolution","len":2},{"key":"range","title":"Range","len":4}],"signalType":{"key":"analog","name":"Analog","baseType":{"name":"Number"},"range":{"min":0,"max":4095}},"drivers":["custom_Q10k_pot_anl","custom_ADS1015"]}},"signalType":{"key":"analog","name":"Analog","baseType":{"name":"Number"},"range":{"min":0,"max":4095}},"index":0,"clients":[{"id":3639,"createdAt":"2020-08-14T01:50:46.331Z","updatedAt":"2020-08-14T01:50:46.331Z","clientId":255,"subClientId":1773,"serviceId":6884,"PortId":14518,"client":{"id":255,"name":"Q #02858","mac_address":"08:6b:d7:49:0b:2a","proxy":"02:81:e6:8e:59:ca","state":"ON","rssi":-58,"batteryLevel":100,"batteryMode":"USB","lifeCycle":false,"manufacturer":"Quantum","category":{"category":null},"advertisement":{"localName":"Q #02858","txPowerLevel":1,"serviceData":[],"serviceUuids":["5155414e54554d430001ffffffffffff"],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]},"energyInformation":{"batteryLevel":"100%","batteryVoltage":"3282mV","deviceVoltage":"3.285V","internalResistance":"0.10","powerTypeNumeric":1,"powerType":"USB"},"createdAt":"2020-08-14T01:46:33.780Z","updatedAt":"2020-08-14T01:48:40.932Z","proxyLinkId":1},"subClient":{"id":1773,"name":"Left","category":{"category":7,"subCategory":2},"index":1,"createdAt":"2020-08-14T01:48:32.635Z","updatedAt":"2020-08-14T01:48:39.591Z","ClientId":255},"service":{"id":6884,"client_mac_address":null,"name":"X-axis","signalType":"Analog In","serviceKey":"q_analog_in","uuid":"b71c09158c3a51008db87c5040729981","characteristics":[{"uuid":"6375a20d31ae4456aaf68fc84e3cce26","name":null,"type":null,"properties":["read"],"value":"X-axis"},{"uuid":"a97ba6d9c40941188735b5bef87b9afd","name":null,"type":null,"properties":["read","notify"],"value":"\u0000\u0000\u0006"},{"uuid":"93d79faa21ed4ce7b658d9bcb06bd943","name":null,"type":null,"properties":["read"],"value":"124095124095"},{"uuid":"1270fde2fd5e4e4fb866241f105f7b15","name":null,"type":null,"properties":["read"],"value":"\u0001\u0000Left~7~2"}],"type":null,"createdAt":"2020-08-14T01:48:33.784Z","updatedAt":"2020-08-14T01:48:40.345Z","SubClientId":1773}}],"NodeId":4},{"id":"14519","internalFlowId":"10159","type":"quantum","selected":false,"name":"2f9ac4ec-7c4c-46c8-83c9-9d0f37055533","in":false,"label":"Y-axis","description":"Nothing added here yet.","qTrigger":null,"defaultValue":null,"properties":{"clientService":{"key":"q_analog_in","name":"Analog In","uuid":"b71c0915-8c3a-5100-8db8-7c5040729981","value_len":"4","props":["read","notify"],"propChar":[{"key":"resolution","title":"Resolution","len":2},{"key":"range","title":"Range","len":4}],"signalType":{"key":"analog","name":"Analog","baseType":{"name":"Number"},"range":{"min":0,"max":4095}},"drivers":["custom_Q10k_pot_anl","custom_ADS1015"]}},"signalType":{"key":"analog","name":"Analog","baseType":{"name":"Number"},"range":{"min":0,"max":4095}},"index":1,"clients":[{"id":3640,"createdAt":"2020-08-14T01:50:46.331Z","updatedAt":"2020-08-14T01:50:46.331Z","clientId":255,"subClientId":1773,"serviceId":6885,"PortId":14519,"client":{"id":255,"name":"Q #02858","mac_address":"08:6b:d7:49:0b:2a","proxy":"02:81:e6:8e:59:ca","state":"ON","rssi":-58,"batteryLevel":100,"batteryMode":"USB","lifeCycle":false,"manufacturer":"Quantum","category":{"category":null},"advertisement":{"localName":"Q #02858","txPowerLevel":1,"serviceData":[],"serviceUuids":["5155414e54554d430001ffffffffffff"],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]},"energyInformation":{"batteryLevel":"100%","batteryVoltage":"3282mV","deviceVoltage":"3.285V","internalResistance":"0.10","powerTypeNumeric":1,"powerType":"USB"},"createdAt":"2020-08-14T01:46:33.780Z","updatedAt":"2020-08-14T01:48:40.932Z","proxyLinkId":1},"subClient":{"id":1773,"name":"Left","category":{"category":7,"subCategory":2},"index":1,"createdAt":"2020-08-14T01:48:32.635Z","updatedAt":"2020-08-14T01:48:39.591Z","ClientId":255},"service":{"id":6885,"client_mac_address":null,"name":"Y-axis","signalType":"Analog In","serviceKey":"q_analog_in","uuid":"b71c09158c3a51018db87c5040729981","characteristics":[{"uuid":"6375a20d31ae4456aaf68fc84e3cce26","name":null,"type":null,"properties":["read"],"value":"Y-axis"},{"uuid":"a97ba6d9c40941188735b5bef87b9afd","name":null,"type":null,"properties":["read","notify"],"value":"\u0000\u0000\u0005"},{"uuid":"93d79faa21ed4ce7b658d9bcb06bd943","name":null,"type":null,"properties":["read"],"value":"124095124095"},{"uuid":"1270fde2fd5e4e4fb866241f105f7b15","name":null,"type":null,"properties":["read"],"value":"\u0001\u0000Left~7~2"}],"type":null,"createdAt":"2020-08-14T01:48:33.785Z","updatedAt":"2020-08-14T01:48:40.347Z","SubClientId":1773}}],"NodeId":4},{"id":"14520","internalFlowId":"10160","type":"quantum","selected":false,"name":"5cc8bd5f-c6dc-4e35-851d-98495410d0eb","in":false,"label":"Button","description":"Nothing added here yet.","qTrigger":null,"defaultValue":null,"properties":{"clientService":{"key":"q_digital_in","name":"Digital In","uuid":"4ae77ff2-1d7c-5100-96d0-50b42a0fc08a","value_len":"1","props":["read","notify"],"propChar":[],"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"drivers":["custom_gpio_in","custom_Q4x3keypad","custom_mcp23017_in","custom_HC_SR501","custom_osepp_prox_01","custom_pull_down_input_le","custom_floating_input_le","custom_pull_up_input_le"]}},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":2,"clients":[{"id":3641,"createdAt":"2020-08-14T01:50:46.331Z","updatedAt":"2020-08-14T01:50:46.331Z","clientId":255,"subClientId":1773,"serviceId":6886,"PortId":14520,"client":{"id":255,"name":"Q #02858","mac_address":"08:6b:d7:49:0b:2a","proxy":"02:81:e6:8e:59:ca","state":"ON","rssi":-58,"batteryLevel":100,"batteryMode":"USB","lifeCycle":false,"manufacturer":"Quantum","category":{"category":null},"advertisement":{"localName":"Q #02858","txPowerLevel":1,"serviceData":[],"serviceUuids":["5155414e54554d430001ffffffffffff"],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]},"energyInformation":{"batteryLevel":"100%","batteryVoltage":"3282mV","deviceVoltage":"3.285V","internalResistance":"0.10","powerTypeNumeric":1,"powerType":"USB"},"createdAt":"2020-08-14T01:46:33.780Z","updatedAt":"2020-08-14T01:48:40.932Z","proxyLinkId":1},"subClient":{"id":1773,"name":"Left","category":{"category":7,"subCategory":2},"index":1,"createdAt":"2020-08-14T01:48:32.635Z","updatedAt":"2020-08-14T01:48:39.591Z","ClientId":255},"service":{"id":6886,"client_mac_address":null,"name":"Button","signalType":"Digital In","serviceKey":"q_digital_in","uuid":"4ae77ff21d7c510296d050b42a0fc08a","characteristics":[{"uuid":"6375a20d31ae4456aaf68fc84e3cce26","name":null,"type":null,"properties":["read"],"value":"Button"},{"uuid":"a97ba6d9c40941188735b5bef87b9afd","name":null,"type":null,"properties":["read","notify"],"value":"\u0000"},{"uuid":"93d79faa21ed4ce7b658d9bcb06bd943","name":null,"type":null,"properties":["read"],"value":"-"},{"uuid":"1270fde2fd5e4e4fb866241f105f7b15","name":null,"type":null,"properties":["read"],"value":"\u0001\u0000Left~7~2"}],"type":null,"createdAt":"2020-08-14T01:48:33.787Z","updatedAt":"2020-08-14T01:48:40.350Z","SubClientId":1773}}],"NodeId":4}],"category":"Input Control","version":"0.0.1"},{"id":"5","internalFlowId":"5","type":"quantum","selected":false,"x":186.354,"y":658.866,"name":"Right","mappingDescription":"No instructions defined!","description":"Joystick controller with optional button","color":"#02B0EF","qType":"Widget","originalName":"Joystick","factoryId":null,"properties":{"mappableCategory":{"category":7,"subCategory":2},"multiWidget":false,"manufacturer":"generic"},"ports":[{"id":"14521","internalFlowId":"10161","type":"quantum","selected":false,"name":"942a1395-7eb9-44d4-bdcf-525074cb3a6d","in":false,"label":"X-axis","description":"Nothing added here yet.","qTrigger":null,"defaultValue":null,"properties":{"clientService":{"key":"q_analog_in","name":"Analog In","uuid":"b71c0915-8c3a-5100-8db8-7c5040729981","value_len":"4","props":["read","notify"],"propChar":[{"key":"resolution","title":"Resolution","len":2},{"key":"range","title":"Range","len":4}],"signalType":{"key":"analog","name":"Analog","baseType":{"name":"Number"},"range":{"min":0,"max":4095}},"drivers":["custom_Q10k_pot_anl","custom_ADS1015"]}},"signalType":{"key":"analog","name":"Analog","baseType":{"name":"Number"},"range":{"min":0,"max":4095}},"index":0,"clients":[{"id":3642,"createdAt":"2020-08-14T01:50:46.331Z","updatedAt":"2020-08-14T01:50:46.331Z","clientId":255,"subClientId":1774,"serviceId":6887,"PortId":14521,"client":{"id":255,"name":"Q #02858","mac_address":"08:6b:d7:49:0b:2a","proxy":"02:81:e6:8e:59:ca","state":"ON","rssi":-58,"batteryLevel":100,"batteryMode":"USB","lifeCycle":false,"manufacturer":"Quantum","category":{"category":null},"advertisement":{"localName":"Q #02858","txPowerLevel":1,"serviceData":[],"serviceUuids":["5155414e54554d430001ffffffffffff"],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]},"energyInformation":{"batteryLevel":"100%","batteryVoltage":"3282mV","deviceVoltage":"3.285V","internalResistance":"0.10","powerTypeNumeric":1,"powerType":"USB"},"createdAt":"2020-08-14T01:46:33.780Z","updatedAt":"2020-08-14T01:48:40.932Z","proxyLinkId":1},"subClient":{"id":1774,"name":"Right","category":{"category":7,"subCategory":2},"index":2,"createdAt":"2020-08-14T01:48:33.043Z","updatedAt":"2020-08-14T01:48:39.885Z","ClientId":255},"service":{"id":6887,"client_mac_address":null,"name":"X-axis","signalType":"Analog In","serviceKey":"q_analog_in","uuid":"b71c09158c3a51038db87c5040729981","characteristics":[{"uuid":"6375a20d31ae4456aaf68fc84e3cce26","name":null,"type":null,"properties":["read"],"value":"X-axis"},{"uuid":"a97ba6d9c40941188735b5bef87b9afd","name":null,"type":null,"properties":["read","notify"],"value":"\u0000\u0000\u0005y"},{"uuid":"93d79faa21ed4ce7b658d9bcb06bd943","name":null,"type":null,"properties":["read"],"value":"124095124095"},{"uuid":"1270fde2fd5e4e4fb866241f105f7b15","name":null,"type":null,"properties":["read"],"value":"\u0001\u0001Right~7~2"}],"type":null,"createdAt":"2020-08-14T01:48:33.788Z","updatedAt":"2020-08-14T01:48:40.353Z","SubClientId":1774}}],"NodeId":5},{"id":"14522","internalFlowId":"10162","type":"quantum","selected":false,"name":"33b658a8-0c01-4faf-871e-aa41f9d86e05","in":false,"label":"Y-axis","description":"Nothing added here yet.","qTrigger":null,"defaultValue":null,"properties":{"clientService":{"key":"q_analog_in","name":"Analog In","uuid":"b71c0915-8c3a-5100-8db8-7c5040729981","value_len":"4","props":["read","notify"],"propChar":[{"key":"resolution","title":"Resolution","len":2},{"key":"range","title":"Range","len":4}],"signalType":{"key":"analog","name":"Analog","baseType":{"name":"Number"},"range":{"min":0,"max":4095}},"drivers":["custom_Q10k_pot_anl","custom_ADS1015"]}},"signalType":{"key":"analog","name":"Analog","baseType":{"name":"Number"},"range":{"min":0,"max":4095}},"index":1,"clients":[{"id":3643,"createdAt":"2020-08-14T01:50:46.331Z","updatedAt":"2020-08-14T01:50:46.331Z","clientId":255,"subClientId":1774,"serviceId":6888,"PortId":14522,"client":{"id":255,"name":"Q #02858","mac_address":"08:6b:d7:49:0b:2a","proxy":"02:81:e6:8e:59:ca","state":"ON","rssi":-58,"batteryLevel":100,"batteryMode":"USB","lifeCycle":false,"manufacturer":"Quantum","category":{"category":null},"advertisement":{"localName":"Q #02858","txPowerLevel":1,"serviceData":[],"serviceUuids":["5155414e54554d430001ffffffffffff"],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]},"energyInformation":{"batteryLevel":"100%","batteryVoltage":"3282mV","deviceVoltage":"3.285V","internalResistance":"0.10","powerTypeNumeric":1,"powerType":"USB"},"createdAt":"2020-08-14T01:46:33.780Z","updatedAt":"2020-08-14T01:48:40.932Z","proxyLinkId":1},"subClient":{"id":1774,"name":"Right","category":{"category":7,"subCategory":2},"index":2,"createdAt":"2020-08-14T01:48:33.043Z","updatedAt":"2020-08-14T01:48:39.885Z","ClientId":255},"service":{"id":6888,"client_mac_address":null,"name":"Y-axis","signalType":"Analog In","serviceKey":"q_analog_in","uuid":"b71c09158c3a51048db87c5040729981","characteristics":[{"uuid":"6375a20d31ae4456aaf68fc84e3cce26","name":null,"type":null,"properties":["read"],"value":"Y-axis"},{"uuid":"a97ba6d9c40941188735b5bef87b9afd","name":null,"type":null,"properties":["read","notify"],"value":"\u0000\u0000\u0007\b"},{"uuid":"93d79faa21ed4ce7b658d9bcb06bd943","name":null,"type":null,"properties":["read"],"value":"124095124095"},{"uuid":"1270fde2fd5e4e4fb866241f105f7b15","name":null,"type":null,"properties":["read"],"value":"\u0001\u0001Right~7~2"}],"type":null,"createdAt":"2020-08-14T01:48:33.789Z","updatedAt":"2020-08-14T01:48:40.355Z","SubClientId":1774}}],"NodeId":5},{"id":"14523","internalFlowId":"10163","type":"quantum","selected":false,"name":"3e16e5b7-6dfe-47f1-8863-1855bb2a6404","in":false,"label":"Button","description":"Nothing added here yet.","qTrigger":null,"defaultValue":null,"properties":{"clientService":{"key":"q_digital_in","name":"Digital In","uuid":"4ae77ff2-1d7c-5100-96d0-50b42a0fc08a","value_len":"1","props":["read","notify"],"propChar":[],"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"drivers":["custom_gpio_in","custom_Q4x3keypad","custom_mcp23017_in","custom_HC_SR501","custom_osepp_prox_01","custom_pull_down_input_le","custom_floating_input_le","custom_pull_up_input_le"]}},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":2,"clients":[{"id":3644,"createdAt":"2020-08-14T01:50:46.331Z","updatedAt":"2020-08-14T01:50:46.331Z","clientId":255,"subClientId":1774,"serviceId":6889,"PortId":14523,"client":{"id":255,"name":"Q #02858","mac_address":"08:6b:d7:49:0b:2a","proxy":"02:81:e6:8e:59:ca","state":"ON","rssi":-58,"batteryLevel":100,"batteryMode":"USB","lifeCycle":false,"manufacturer":"Quantum","category":{"category":null},"advertisement":{"localName":"Q #02858","txPowerLevel":1,"serviceData":[],"serviceUuids":["5155414e54554d430001ffffffffffff"],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]},"energyInformation":{"batteryLevel":"100%","batteryVoltage":"3282mV","deviceVoltage":"3.285V","internalResistance":"0.10","powerTypeNumeric":1,"powerType":"USB"},"createdAt":"2020-08-14T01:46:33.780Z","updatedAt":"2020-08-14T01:48:40.932Z","proxyLinkId":1},"subClient":{"id":1774,"name":"Right","category":{"category":7,"subCategory":2},"index":2,"createdAt":"2020-08-14T01:48:33.043Z","updatedAt":"2020-08-14T01:48:39.885Z","ClientId":255},"service":{"id":6889,"client_mac_address":null,"name":"Button","signalType":"Digital In","serviceKey":"q_digital_in","uuid":"4ae77ff21d7c510596d050b42a0fc08a","characteristics":[{"uuid":"6375a20d31ae4456aaf68fc84e3cce26","name":null,"type":null,"properties":["read"],"value":"Button"},{"uuid":"a97ba6d9c40941188735b5bef87b9afd","name":null,"type":null,"properties":["read","notify"],"value":"\u0000"},{"uuid":"93d79faa21ed4ce7b658d9bcb06bd943","name":null,"type":null,"properties":["read"],"value":"-"},{"uuid":"1270fde2fd5e4e4fb866241f105f7b15","name":null,"type":null,"properties":["read"],"value":"\u0001\u0001Right~7~2"}],"type":null,"createdAt":"2020-08-14T01:48:33.791Z","updatedAt":"2020-08-14T01:48:40.358Z","SubClientId":1774}}],"NodeId":5}],"category":"Input Control","version":"0.0.1"},{"id":"6","internalFlowId":"6","type":"quantum","selected":false,"x":1031.429,"y":692.372,"name":"Servo","mappingDescription":"No instructions defined!","description":"The Servo can adjust to any position between 0 and 180 degrees","color":"#02B0EF","qType":"Widget","originalName":"Servo","factoryId":null,"properties":{"executableWidgetCode":"if(trigger === 0){\n  return [inPorts[0].value]\n}else if(trigger === 1){\n  return [{degrees: inPorts[1].value, bot_offset: inPorts[2].value || 0, top_offset: inPorts[3].value || 0}]\n}","mappableCategory":{"category":4,"subCategory":4},"multiWidget":false,"manufacturer":"generic"},"ports":[{"id":"14524","internalFlowId":"10164","type":"quantum","selected":false,"name":"17d27b7f-6bc5-4804-bdae-a2afee623e04","in":true,"label":"Servo","description":"Nothing added here yet.","qTrigger":true,"defaultValue":null,"properties":{"hidden":true,"clientService":{"key":"q_servo","name":"Servo Motor","uuid":"3248ed17-eb11-5100-90b3-a95cd4c64686","value_len":"1","props":["write"],"propChar":[],"signalType":{"key":"servo","name":"Servo","baseType":{"name":"JSON"},"internal":true},"drivers":["custom_generic_servo","custom_pca9865_servo","custom_tlc5940_servo"]}},"signalType":{"key":"servo","name":"Servo","baseType":{"name":"JSON"},"internal":true},"index":0,"clients":[{"id":3645,"createdAt":"2020-08-14T01:50:46.331Z","updatedAt":"2020-08-14T01:50:46.331Z","clientId":256,"subClientId":1772,"serviceId":6875,"PortId":14524,"client":{"id":256,"name":"Q #03220","mac_address":"08:6b:d7:49:0c:94","proxy":"02:81:e6:8e:59:ca","state":"ON","rssi":-44,"batteryLevel":100,"batteryMode":"USB","lifeCycle":false,"manufacturer":"Quantum","category":{"category":null},"advertisement":{"localName":"Q #03220","txPowerLevel":1,"serviceData":[],"serviceUuids":["5155414e54554d430000ffffffffffff"],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]},"energyInformation":{"batteryLevel":"100%","batteryVoltage":"3314mV","deviceVoltage":"3.314V","internalResistance":"0.03","powerTypeNumeric":1,"powerType":"USB"},"createdAt":"2020-08-14T01:46:40.880Z","updatedAt":"2020-08-14T01:48:27.931Z","proxyLinkId":1},"subClient":{"id":1772,"name":"Servo","category":{"category":4,"subCategory":4},"index":3,"createdAt":"2020-08-14T01:48:23.654Z","updatedAt":"2020-08-14T01:48:27.303Z","ClientId":256},"service":{"id":6875,"client_mac_address":null,"name":"Servo","signalType":"Servo Motor","serviceKey":"q_servo","uuid":"3248ed17eb11510290b3a95cd4c64686","characteristics":[{"uuid":"6375a20d31ae4456aaf68fc84e3cce26","name":null,"type":null,"properties":["read"],"value":"Servo"},{"uuid":"a97ba6d9c40941188735b5bef87b9afd","name":null,"type":null,"properties":["write"],"value":""},{"uuid":"93d79faa21ed4ce7b658d9bcb06bd943","name":null,"type":null,"properties":["read"],"value":"-"},{"uuid":"1270fde2fd5e4e4fb866241f105f7b15","name":null,"type":null,"properties":["read"],"value":"\u0001\u0002Servo~4~4"}],"type":null,"createdAt":"2020-08-14T01:48:23.938Z","updatedAt":"2020-08-14T01:48:27.669Z","SubClientId":1772}}],"NodeId":6},{"id":"14525","internalFlowId":"10165","type":"quantum","selected":false,"name":"33b5a667-acdf-483b-ac84-ae150680f5d4","in":true,"label":"Degrees","description":"Nothing added here yet.","qTrigger":true,"defaultValue":null,"properties":{"virtual":true},"signalType":{"key":"scaled_number","name":"Scaled Number","baseType":{"name":"Number"},"range":{"min":0,"max":180}},"index":1,"clients":[],"NodeId":6},{"id":"14526","internalFlowId":"10166","type":"quantum","selected":false,"name":"d18cfc13-29c8-47d8-a557-9e84cbc14df3","in":true,"label":"0 Offsets","description":"Nothing added here yet.","qTrigger":true,"defaultValue":null,"properties":{"virtual":true},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":2,"clients":[],"NodeId":6},{"id":"14527","internalFlowId":"10167","type":"quantum","selected":false,"name":"41acaff7-c984-41f2-b902-ed1d3bc18f6d","in":true,"label":"180 Offsets","description":"Nothing added here yet.","qTrigger":true,"defaultValue":null,"properties":{"virtual":true},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":3,"clients":[],"NodeId":6}],"category":"Actuators","version":"0.0.1"},{"id":"7","internalFlowId":"7","type":"quantum","selected":false,"x":618.464,"y":646.487,"name":"Manual Ranging","mappingDescription":null,"description":"Set custom Ranges to a numeric value.","color":"#DE00BC","qType":"Snippet","originalName":"Manual Ranging","factoryId":null,"properties":{"executeCode":"const value_between = (value, min, max) => {\n    if(min > max){\n        return value <= min && value >= max;\n    }else if(max > min){\n        return value >= min && value <= max;\n    }else{\n        return true;\n    }\n}\n\n\nconst value  = inPorts[0].value ? parseFloat(inPorts[0].value) : 0;\nconst newMin = inPorts[3].value ? parseFloat(inPorts[3].value) : 0;\nconst newMax = inPorts[4].value ? parseFloat(inPorts[4].value) : 0;\nconst oldMin = inPorts[1].value ? parseFloat(inPorts[1].value) : 0;\nconst oldMax = inPorts[2].value ? parseFloat(inPorts[2].value) : 0;\n\nif(value_between(value, oldMin, oldMax)){\n  \n    const retValue = ((value - oldMin) * (newMax - newMin) / (oldMax - oldMin) + newMin);\n  \n  if(inPorts[5].value)\n    return [Math.round(retValue)];\n  else{\n    return [retValue];\n  } \n}"},"ports":[{"id":"14528","internalFlowId":"10168","type":"quantum","selected":false,"name":"17c6fca9-2485-4b8d-976e-64d3ae544462","in":true,"label":"Value","description":null,"qTrigger":true,"defaultValue":"","properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":0,"clients":[],"NodeId":7},{"id":"14529","internalFlowId":"10169","type":"quantum","selected":false,"name":"524f25a3-f688-415b-92e1-1e22959ec122","in":true,"label":"In Min","description":null,"qTrigger":false,"defaultValue":"0","properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":1,"clients":[],"NodeId":7},{"id":"14530","internalFlowId":"10170","type":"quantum","selected":false,"name":"7ae11d9a-ebe2-43cd-81aa-852a43a4f164","in":true,"label":"In Max","description":null,"qTrigger":false,"defaultValue":"0","properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":2,"clients":[],"NodeId":7},{"id":"14531","internalFlowId":"10171","type":"quantum","selected":false,"name":"af9a84b2-138e-453c-93ad-b23b25210950","in":true,"label":"Out Min","description":null,"qTrigger":false,"defaultValue":"0","properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":3,"clients":[],"NodeId":7},{"id":"14532","internalFlowId":"10172","type":"quantum","selected":false,"name":"646f7619-05db-4a79-bb80-d9b9cf6a0af8","in":true,"label":"Out Max","description":null,"qTrigger":false,"defaultValue":"0","properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":4,"clients":[],"NodeId":7},{"id":"14533","internalFlowId":"10173","type":"quantum","selected":false,"name":"6dd41a73-7606-4919-8c3a-fbbcb987a45a","in":true,"label":"Rounded","description":null,"qTrigger":false,"defaultValue":"0","properties":{},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":5,"clients":[],"NodeId":7},{"id":"14534","internalFlowId":"10174","type":"quantum","selected":false,"name":"10e972b1-d8d0-40a0-aef8-04e926a816e8","in":false,"label":"Value","description":null,"qTrigger":null,"defaultValue":null,"properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":6,"clients":[],"NodeId":7}],"category":"Compare","version":"0.0.1"},{"id":"8","internalFlowId":"8","type":"quantum","selected":false,"x":-195.421,"y":880.09,"name":"Straight","mappingDescription":null,"description":"Adds a Button that can be clicked on the Interface. Outputs are True and False.","color":"#07D174","qType":"Gadget","originalName":"Button","factoryId":null,"properties":{"gadgetType":{"name":"Button"},"gadgetLabel":"Straight","gadgetColor":"info","gadgetGroup":"1","gadgetIcon":"buttonIcon","gadgetStyle":"full"},"ports":[{"id":"14535","internalFlowId":"10175","type":"quantum","selected":false,"name":"af2d2ae8-2554-47b5-9c47-4d1968d892cd","in":true,"label":"Label","description":null,"qTrigger":false,"defaultValue":null,"properties":{},"signalType":{"key":"string","name":"String","baseType":{"name":"String"}},"index":0,"clients":[],"NodeId":8},{"id":"14536","internalFlowId":"10176","type":"quantum","selected":false,"name":"15b64081-3158-4939-8e59-1c5844ab1b66","in":true,"label":"State","description":null,"qTrigger":true,"defaultValue":null,"properties":{},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":1,"clients":[],"NodeId":8},{"id":"14537","internalFlowId":"10177","type":"quantum","selected":false,"name":"b121bc1a-7c38-45bc-ba94-214ca7eb264f","in":false,"label":"State","description":null,"qTrigger":null,"defaultValue":null,"properties":{},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":2,"clients":[],"NodeId":8}],"category":"Action","version":"0.0.1"},{"id":"9","internalFlowId":"9","type":"quantum","selected":false,"x":-198.624,"y":1043.415,"name":"Left","mappingDescription":null,"description":"Adds a Button that can be clicked on the Interface. Outputs are True and False.","color":"#07D174","qType":"Gadget","originalName":"Button","factoryId":null,"properties":{"gadgetType":{"name":"Button"},"gadgetLabel":"Left","gadgetColor":"info","gadgetGroup":"1","gadgetIcon":"buttonIcon","gadgetStyle":"full"},"ports":[{"id":"14538","internalFlowId":"10178","type":"quantum","selected":false,"name":"dbebf689-54ae-46c3-b71c-4d387927ca1c","in":true,"label":"Label","description":null,"qTrigger":false,"defaultValue":null,"properties":{},"signalType":{"key":"string","name":"String","baseType":{"name":"String"}},"index":0,"clients":[],"NodeId":9},{"id":"14539","internalFlowId":"10179","type":"quantum","selected":false,"name":"bbb5d43e-68df-4b8f-82cb-c3258179d3e2","in":true,"label":"State","description":null,"qTrigger":true,"defaultValue":null,"properties":{},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":1,"clients":[],"NodeId":9},{"id":"14540","internalFlowId":"10180","type":"quantum","selected":false,"name":"3e3f8128-4058-4e2b-b3d0-f697a40dc9d5","in":false,"label":"State","description":null,"qTrigger":null,"defaultValue":null,"properties":{},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":2,"clients":[],"NodeId":9}],"category":"Action","version":"0.0.1"},{"id":"10","internalFlowId":"10","type":"quantum","selected":false,"x":-198.624,"y":1203.538,"name":"Right","mappingDescription":null,"description":"Adds a Button that can be clicked on the Interface. Outputs are True and False.","color":"#07D174","qType":"Gadget","originalName":"Button","factoryId":null,"properties":{"gadgetType":{"name":"Button"},"gadgetLabel":"Right","gadgetColor":"info","gadgetGroup":"1","gadgetIcon":"buttonIcon","gadgetStyle":"full"},"ports":[{"id":"14541","internalFlowId":"10181","type":"quantum","selected":false,"name":"ec822372-ef07-4dc5-917a-08ab8235eada","in":true,"label":"Label","description":null,"qTrigger":false,"defaultValue":null,"properties":{},"signalType":{"key":"string","name":"String","baseType":{"name":"String"}},"index":0,"clients":[],"NodeId":10},{"id":"14542","internalFlowId":"10182","type":"quantum","selected":false,"name":"b000e9a4-fb8a-413e-aa17-7daf3293226c","in":true,"label":"State","description":null,"qTrigger":true,"defaultValue":null,"properties":{},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":1,"clients":[],"NodeId":10},{"id":"14543","internalFlowId":"10183","type":"quantum","selected":false,"name":"c79b147a-fd52-42ac-b975-a675de215c55","in":false,"label":"State","description":null,"qTrigger":null,"defaultValue":null,"properties":{},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":2,"clients":[],"NodeId":10}],"category":"Action","version":"0.0.1"},{"id":"11","internalFlowId":"11","type":"quantum","selected":false,"x":97.603,"y":872.083,"name":"90","mappingDescription":null,"description":"Set a static number that can be triggered.","color":"#DE00BC","qType":"Snippet","originalName":"Static Number","factoryId":null,"properties":{"executeCode":"if(trigger === 0){\n  return [parseFloat(inPorts[1].value) || 0];\n} "},"ports":[{"id":"14544","internalFlowId":"10184","type":"quantum","selected":false,"name":"4fa320e8-b305-4d84-9f59-66abd8342445","in":true,"label":"Trigger","description":null,"qTrigger":true,"defaultValue":null,"properties":{"defaultHidden":true},"signalType":{"key":"trigger","name":"Trigger","baseType":{"name":"String"}},"index":0,"clients":[],"NodeId":11},{"id":"14545","internalFlowId":"10185","type":"quantum","selected":false,"name":"7a07bd83-3777-4dde-ac58-7babe51ff5e0","in":true,"label":"Value","description":null,"qTrigger":false,"defaultValue":"","properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":1,"clients":[],"NodeId":11},{"id":"14546","internalFlowId":"10186","type":"quantum","selected":false,"name":"41b09ba6-66a8-4161-b909-2551deea2aad","in":false,"label":"Value","description":null,"qTrigger":null,"defaultValue":null,"properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":2,"clients":[],"NodeId":11}],"category":"Data","version":"0.0.1"},{"id":"12","internalFlowId":"12","type":"quantum","selected":false,"x":97.603,"y":1038.611,"name":"0","mappingDescription":null,"description":"Set a static number that can be triggered.","color":"#DE00BC","qType":"Snippet","originalName":"Static Number","factoryId":null,"properties":{"executeCode":"if(trigger === 0){\n  return [parseFloat(inPorts[1].value) || 0];\n} "},"ports":[{"id":"14547","internalFlowId":"10187","type":"quantum","selected":false,"name":"b1d6251b-9124-4752-aa99-d1abd2a585f7","in":true,"label":"Trigger","description":null,"qTrigger":true,"defaultValue":null,"properties":{"defaultHidden":true},"signalType":{"key":"trigger","name":"Trigger","baseType":{"name":"String"}},"index":0,"clients":[],"NodeId":12},{"id":"14548","internalFlowId":"10188","type":"quantum","selected":false,"name":"ee2a788b-7ad2-430d-b8f1-3672a3ae3c5b","in":true,"label":"Value","description":null,"qTrigger":false,"defaultValue":"","properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":1,"clients":[],"NodeId":12},{"id":"14549","internalFlowId":"10189","type":"quantum","selected":false,"name":"4cebcdca-56b7-4aba-ab4f-03dcfb27f487","in":false,"label":"Value","description":null,"qTrigger":null,"defaultValue":null,"properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":2,"clients":[],"NodeId":12}],"category":"Data","version":"0.0.1"},{"id":"13","internalFlowId":"13","type":"quantum","selected":false,"x":96.002,"y":1197.133,"name":"180","mappingDescription":null,"description":"Set a static number that can be triggered.","color":"#DE00BC","qType":"Snippet","originalName":"Static Number","factoryId":null,"properties":{"executeCode":"if(trigger === 0){\n  return [parseFloat(inPorts[1].value) || 0];\n} "},"ports":[{"id":"14550","internalFlowId":"10190","type":"quantum","selected":false,"name":"b6edf25c-e384-45d7-8039-daafb729829b","in":true,"label":"Trigger","description":null,"qTrigger":true,"defaultValue":null,"properties":{"defaultHidden":true},"signalType":{"key":"trigger","name":"Trigger","baseType":{"name":"String"}},"index":0,"clients":[],"NodeId":13},{"id":"14551","internalFlowId":"10191","type":"quantum","selected":false,"name":"a9ed36ed-9928-4e7b-acd1-c100efc98e8d","in":true,"label":"Value","description":null,"qTrigger":false,"defaultValue":"","properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":1,"clients":[],"NodeId":13},{"id":"14552","internalFlowId":"10192","type":"quantum","selected":false,"name":"3b895851-944a-4d44-8700-81725b240a95","in":false,"label":"Value","description":null,"qTrigger":null,"defaultValue":null,"properties":{},"signalType":{"key":"number","name":"Number","baseType":{"name":"Number"}},"index":2,"clients":[],"NodeId":13}],"category":"Data","version":"0.0.1"},{"id":"14","internalFlowId":"14","type":"quantum","selected":false,"x":124.655,"y":393.189,"name":"Digital Toggle","mappingDescription":null,"description":"Can be used to Toggle a Digital Signal. Set is always True, Reset always false.","color":"#DE00BC","qType":"Snippet","originalName":"Digital TOGGLE","factoryId":null,"properties":{"executeCode":"switch (trigger) {\n    case 0:\n        context.state = true;\n        break;\n    case 1:\n        context.state = false;\n        break;\n    case 2:\n        {\n            context.state = !context.state;\n            break;\n        };\n    default:\n        break;\n};\nreturn [context.state, !context.state];"},"ports":[{"id":"14553","internalFlowId":"10193","type":"quantum","selected":false,"name":"83815e22-f0fb-4b05-9bee-f576281abb12","in":true,"label":"Set","description":null,"qTrigger":true,"defaultValue":"","properties":{},"signalType":{"key":"trigger","name":"Trigger","baseType":{"name":"String"}},"index":0,"clients":[],"NodeId":14},{"id":"14554","internalFlowId":"10194","type":"quantum","selected":false,"name":"e0c08829-0edb-4afe-a426-86db9e084949","in":true,"label":"Reset","description":null,"qTrigger":true,"defaultValue":"","properties":{},"signalType":{"key":"trigger","name":"Trigger","baseType":{"name":"String"}},"index":1,"clients":[],"NodeId":14},{"id":"14555","internalFlowId":"10195","type":"quantum","selected":false,"name":"950ca94d-82c4-4195-a299-8bd5c89c5ecb","in":true,"label":"Toggle","description":null,"qTrigger":true,"defaultValue":"","properties":{},"signalType":{"key":"trigger","name":"Trigger","baseType":{"name":"String"}},"index":2,"clients":[],"NodeId":14},{"id":"14556","internalFlowId":"10196","type":"quantum","selected":false,"name":"9154708e-7121-41c3-9837-7b854c3a7947","in":false,"label":"Out","description":null,"qTrigger":null,"defaultValue":null,"properties":{},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":3,"clients":[],"NodeId":14},{"id":"14557","internalFlowId":"10197","type":"quantum","selected":false,"name":"d39a7ef6-c58c-497f-9dab-c99055f22bd8","in":false,"label":"Out inverted","description":null,"qTrigger":null,"defaultValue":null,"properties":{},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":4,"clients":[],"NodeId":14}],"category":"Logic","version":"0.0.1"},{"id":"15","internalFlowId":"15","type":"quantum","selected":false,"x":-149.053,"y":397.981,"name":"Forward","mappingDescription":null,"description":"Adds a Button that can be clicked on the Interface. Outputs are True and False.","color":"#07D174","qType":"Gadget","originalName":"Button","factoryId":null,"properties":{"gadgetType":{"name":"Button"},"gadgetLabel":"Button","gadgetColor":"info","gadgetGroup":"1475","gadgetIcon":"buttonIcon","gadgetStyle":"full"},"ports":[{"id":"14558","internalFlowId":"10198","type":"quantum","selected":false,"name":"46df6b85-da76-4bda-afc5-ba11e2067684","in":true,"label":"Label","description":null,"qTrigger":false,"defaultValue":null,"properties":{},"signalType":{"key":"string","name":"String","baseType":{"name":"String"}},"index":0,"clients":[],"NodeId":15},{"id":"14559","internalFlowId":"10199","type":"quantum","selected":false,"name":"e569e6ca-ec92-4744-942d-00bdab6738de","in":true,"label":"State","description":null,"qTrigger":true,"defaultValue":null,"properties":{},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":1,"clients":[],"NodeId":15},{"id":"14560","internalFlowId":"10200","type":"quantum","selected":false,"name":"0f7acd0e-b520-447d-a844-0c0af0375af0","in":false,"label":"State","description":null,"qTrigger":null,"defaultValue":null,"properties":{},"signalType":{"key":"digital","name":"Digital","baseType":{"name":"Boolean"}},"index":2,"clients":[],"NodeId":15}],"category":"Action","version":"0.0.1"}],"status":"Stopped","rendering":{"id":"1215","tabs":[{"id":"1363","internalFlowId":"1362","name":"Tab 1","position":0,"groups":[{"id":"1743","internalFlowId":"1742","name":"Group 1","position":0,"gadgets":[{"id":"9368","NodeId":8,"GadgetGroupId":1743,"position":0},{"id":"9369","NodeId":9,"GadgetGroupId":1743,"position":1},{"id":"9370","NodeId":10,"GadgetGroupId":1743,"position":2},{"id":"9371","NodeId":15,"GadgetGroupId":1743,"position":3}]}]}]},"createdAt":"2020-08-14T01:39:34.138Z","errorLog":null,"debugFlag":false,"version":"0.0.1"}

Steering Car PCB Firmware

JSON
This code is made to only be imported to our application builder on our Q-Server's OS as it is customized to work with our UI.
{"id":188,"name":"Steering Car","commit":"1.2.3-development-3a6d1287","lifecycle":false,"signal":[{"disabled":false,"subClientIndex":0,"subClientName":"Motor BL","subClientCategory":4,"subClientSubCategory":3,"serviceName":"Motor","service":"q_dc_motor","driver":"custom_tri_state_motor","driverValues":{"enablePort":"gpioPortF","enablePin":"2","enableChannel":"26","firstDcPort":"gpioPortB","firstDcPin":"11","secondDcPort":"gpioPortF","secondDcPin":"3"},"signalType":{"key":"motor","name":"Motor","baseType":{"name":"Number"},"range":{"min":-255,"max":255},"internal":true}},{"disabled":false,"subClientIndex":1,"subClientName":"Motor BR","subClientCategory":4,"subClientSubCategory":3,"serviceName":"Motor","service":"q_dc_motor","driver":"custom_tri_state_motor","driverValues":{"enablePort":"gpioPortF","enablePin":"1","enableChannel":"25","firstDcPort":"gpioPortD","firstDcPin":"13","secondDcPort":"gpioPortD","secondDcPin":"14"},"signalType":{"key":"motor","name":"Motor","baseType":{"name":"Number"},"range":{"min":-255,"max":255},"internal":true}},{"disabled":false,"subClientIndex":2,"subClientName":"Servo","subClientCategory":4,"subClientSubCategory":4,"serviceName":"Servo","service":"q_servo","driver":"custom_generic_servo","driverValues":{"port":"gpioPortD","pin":"15","channel":"23"},"signalType":{"key":"servo","name":"Servo","baseType":{"name":"JSON"},"internal":true}}],"version":"0.0.1"}

Credits

Comments